package day13;

public class statictest {
    // 静态变量
    static int staticVar = 0;
    // 实例变量
    int instanceVar = 0;
    
    // 构造代码块（匿名代码块)：每次构造方法执行前都先执行代码块中的代码
    // 静态代码块:随着类的加载而加载，只会执行一次，在类加载时做一些数据初始化工作
    // 静态代码块一般用于初始化静态变量
    // 静态代码块
    static {
        System.out.println("静态代码块被执行");
        staticVar = 10;
    }
    
    // 实例代码块
    {
        System.out.println("实例代码块被执行");
        instanceVar = 5;
    }
    
    // 静态方法
    public static void staticMethod() {
        System.out.println("静态方法被调用，staticVar = " + staticVar);
        // 静态方法不能直接访问实例变量
        // System.out.println(instanceVar); // 这行会编译错误
    }
    
    // 实例方法
    public void instanceMethod() {
        System.out.println("实例方法被调用，staticVar = " + staticVar + ", instanceVar = " + instanceVar);
        // 实例方法可以访问静态变量和实例变量
    }
    
    public static void main(String[] args) {
        System.out.println("main方法开始");
        
        // 访问静态变量
        System.out.println("通过类名访问静态变量: " + statictest.staticVar);
        
        // 调用静态方法
        statictest.staticMethod();
        
        // 创建第一个实例
        System.out.println("\n创建第一个实例:");
        statictest obj1 = new statictest();
        obj1.instanceMethod();
        
        // 创建第二个实例
        System.out.println("\n创建第二个实例:");
        statictest obj2 = new statictest();
        obj2.instanceMethod();
        
        // 修改静态变量
        statictest.staticVar = 100;
        obj1.instanceVar = 50;
        
        System.out.println("\n修改后:");
        System.out.println("obj1的值:");
        obj1.instanceMethod();
        System.out.println("obj2的值:");
        obj2.instanceMethod();
    }
}
